from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from django.core.urlresolvers import reverse

from ..models  import Types
from django.db.models import Q
# Create your views here.


# 功能:数据库信息提取 
# 特点:1.按照 商品父类排序
#     2.为每个子数据数据添加 items 子.父名 = 父.名
def GetAllTypes():
    # 获取数据库 所有 数据   -------> 将 path 与 id 组成一个新的 字段     按照新字段排序    
    ju = Types.objects.extra(select = {'paths':'concat(path,id)'}).order_by('paths')    
    # 将每个数据的*父类名*找到,存入字典  方法 -----> 当前pid == 父类id
    for x in ju:        
        zi_pid  = x.pid
        if zi_pid != 0:
            fu = ju.get(id=zi_pid)
            x.fu_name = fu.name
        else:
            x.fu_name = '顶级分类'
    return ju 


    
# 显示商品分类页面
def type_index(request):
    TypesList = GetAllTypes()
    # 搜索模块
    # 接受参数 types(搜索类别) keywords(搜索条件)
    types   = request.GET.get('types',None)
    keywords = request.GET.get('keywords',None) 
    # 判断是否有搜索条件
    if types:

        # 搜 全部数据
        # 思路:先取符合条件的父类数据 在找符合条件的子类数据 
        #      组成 [对象1,对象2,对象3,对象4,对象5对象6,对象7.....]
        if types == 'all':            
            # 查找所有  父类 当中满足条件的             
            TypesList = TypesList.filter(pid=0).filter(name__contains=keywords)
            # 判断查询条件 父类是否满足条件            
            if len(TypesList) == 0:
                TypesList = GetAllTypes().filter(name__contains=keywords)
                for x in TypesList:        
                    zi_pid  = x.pid                    
                    fu = Types.objects.get(id = zi_pid)
                    x.fu_name = fu.name                                        
            # 不满足条件
            else:
                # 创建一个,空列表存 符合条件 父类1+子类的 +父类2+子类的 +父类3+子类的 +.....
                Zong_list = []
                # 便利符合要求的父类  
                for x in TypesList:
                    # 暂时存放每个 父类+子类的列表
                    bi = [x]
                    # 数据库中找到   父类的每个孩子
                    zi_list = Types.objects.filter(pid = x.id)
                    # 遍历每个孩子  将孩子 装如空列表
                    for m in zi_list:
                        # 子类的  fu_name:父亲的名字
                        m.fu_name = x.name                   
                        # 将孩子 分别加入空列表
                        bi.append(m)
                    # 将 父类 与 子类  组成一个新的列表                
                    Zong_list = Zong_list + bi
                TypesList = Zong_list
            
        # 搜 分类名
        elif types == 'name':
            # 获取库中名字满足条件的
            TypesList = TypesList.filter(name__contains=keywords)
            # 遍历 获取到的数据
            for x in TypesList:
                # 取出每个数据的  pid
                zi_pid  = x.pid
                # 判断是不是 顶级分类
                if zi_pid != 0:
                    # 取到顶级分类的名字 赋值给子类的 fu_name
                    fu = Types.objects.get(id = zi_pid)
                    x.fu_name = fu.name
                    print("搜索",x.fu_name)
                else:
                    x.fu_name = '顶级分类'        

        # 搜 所属类 
        elif types == 'fu_name':
            # 取出所有名字带搜索字的 父类
            TypesList = TypesList.filter(pid=0).filter(name__contains=keywords)
            # 创建一个,空列表存 符合条件 父类1+子类的 +父类2+子类的 +父类3+子类的 +.....
            Zong_list = []
            # 便利符合要求的父类  
            for x in TypesList:
                # 暂时存放每个 父类+子类的列表
                bi = []
                # 数据库中找到   父类的每个孩子
                zi_list = Types.objects.filter(pid = x.id)
                # 遍历每个孩子  将孩子 装如空列表
                for m in zi_list:
                    # 子类的  fu_name:父亲的名字
                    m.fu_name = x.name                   
                    # 将孩子 分别加入空列表
                    bi.append(m)
                # 将 父类 与 子类  组成一个新的列表                
                Zong_list = Zong_list + bi
            TypesList = Zong_list


    # 数据分页 
    from django.core.paginator import Paginator
    # 实例化分页对象,参数1,数据列表  参数2 每页显示的条数
    p = Paginator(TypesList, 4)
    # 获取当前的页码数
    page = request.GET.get('biao',1)
    page = int(page)
    # 获取当前页的数据
    Typelist = p.page(page)
    # 获取所有的页码列表
    pages = p.page_range


    # 将信息放入字典 传入页面
    data = {'info':Typelist}
    return render(request,'admin/types/index.html',data)

# 商品类添加跳转
def type_add(request):        
    # 将 排列好的数据 传入页面
    data = {'info':GetAllTypes()}    
    return render(request,'admin/types/add.html',data)

# 商品类添加
def type_insert(request):
    # 根据pid 选则的 父类id     pid == 父类id  
    # 接受页面传来添加的数据
    jie = request.POST.dict()
    jie.pop('csrfmiddlewaretoken')
    # 判断 选择的父类 是不是顶级分类
    if jie['pid'] == '0':
        jie['path'] = '0,'
    else:
        # 获取父类信息 
        fu = Types.objects.get(id = jie['pid'])
        # path = 父类path + 父id(当前pid)
        jie['path'] = fu.path + jie['pid'] + ','
    Types.objects.create(**jie)
    return HttpResponse('<script>location.href="'+reverse('myadmin_type_index')+'"</script>')

# 删除商品分类
def  type_delete(request):
    # 获取数据库 指定*id*的数据
    ob = Types.objects.get(id = request.GET['id'])
    # 查找 这条数据的 子数据 是否存在
    if Types.objects.filter(pid = ob.id).count():        
        # 子数据存在不能删除
        return JsonResponse({'error':1,'msg':'当前类下有子类不能删除'})            
    # 当前类下有商品也不能删除

    # 没有子类可以删除
    ob.delete()
    return JsonResponse({'error':0,'msg':'删除成功'}) 
           

# 更新name值
def type_update(request):
    t = Types.objects.get(id = request.GET['id'])
    t.name = request.GET['newname']
    t.save()
    return JsonResponse({'msg':'添加成功'})        



